home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / hard / hack / omti.lha / omti.doc next >
Text File  |  1992-11-25  |  17KB  |  475 lines

  1.  
  2.                           O M T I - S O F T W A R E
  3.                           #=#=#=#=#=#=#=#=#=#=#=#=#
  4.  
  5.  
  6. 1.0. Hardware
  7. -------------
  8.  
  9. This  archive contains the sources and executeables to a harddisk-device, and
  10. some  support  programs, who work together with the so called 'omti-harddisk'
  11. interface,  which  interfaces an PC Omti 5520 / 5527 controller to the Amiga.
  12. This  hardware  was published by the german computer magazine c't.  I haven't
  13. designed a PCB by myself.  The c't board must be modified with one more chip:
  14.  
  15.  Omti-Controller         Amiga Bus
  16.  
  17.  DREQ   ----|)*---+
  18.  INTREQ ----|)*---+----- INT2
  19.  
  20.           2/6 74LS05
  21.  
  22. No,  sorry,  I  don't  know  the  exact  pin  numbers  anymore.   I made this
  23. modification  to  my  computer  about  three  years  ago and haven't kept the
  24. documentation.   Best thing is to solder the 74LS05 on the back of one of the
  25. other chips of the c't harddisk interface.
  26.  
  27. The  c't  harddisk  interface  is *A HACK*!  Its controller has no autoconfig
  28. capability and is fixed at 0xee0000.
  29.  
  30. 1.1. The software
  31.  
  32. This  software was written with an Omti 5527 controller.  It was never tested
  33. with an Omti 5520 and MFM drives.  I'm in doubt, whether it will work without
  34. modifications.
  35.  
  36. I'm  using  this  software  together  with two Seagate Drives, a ST238R and a
  37. ST296R  drive  on  an A500.  The board of the A500 is built together with the
  38. two  disks,  a 2 Meg Memory expansion, a serial board and two 3"5 Drives in a
  39. big case.  If you're on the UseNet, you may have heard of 'castle.franken.de'
  40. This is this machine...  :)
  41.  
  42. This archive contains sources and executeables to the following programs:
  43.  
  44. - Boot-Startup-Code for AmigaOS 1.3 and 2.04
  45. - Custom-Bootblocks for AmigaOS 1.3 and 2.04
  46. - example Bootcode
  47. - A Drive-LED Simulator in two versions (only one working :)
  48. - A Low-Level Formatter
  49. - An information-program
  50. - An Disk-installer
  51. - A program to read and to write the boot tracks
  52. - sources for the device
  53.  
  54. You'll need a directory 'DEVS:OMTI' where various files are stored.
  55.  
  56.  
  57. 2.0. Outline
  58. ------------
  59.  
  60. It  always annoyed me, that, while using harddisks, I had to boot from floppy
  61. disk  in  order  to get the omti.device etc.  loaded into memory.  I tried to
  62. build  a  piece  of  hardware, which contained EPROMs with the boot code, but
  63. this failed miserably. So I started moving another way:
  64.  
  65. The  AmigaOS  *MUST*  access  the  floppy  drive in any case.  It must check,
  66. whether  there  is  a  disk  in  the  drive(s) and boot from them, if they're
  67. bootable.   Why  not  write  a custom bootblock and use a custom disk layout,
  68. which can boot from the harddisk with just reading the disk-bootblocks.
  69.  
  70. So the following concept was created:
  71.  
  72. - Loading the bootblock from floppy disk. It contains a bootstrap-loader, which
  73.   is made resident under AmigaOS 1.3 (see below). This one loads the boot-tracks
  74.   (normally tracks 1 - 3 on Cyl 0) from the harddisk). This code is checked for
  75.   a 'BOOT' label, and if this exists, it is executed.
  76.  
  77. - Under AmigaOS 1.3, this code mounts the following devices:
  78.    - CON
  79.    - RAW
  80.    - NEWCON
  81.    - PAR
  82.    - PRT
  83.    - RAM
  84.    - DFx
  85.    - one harddisk
  86.   
  87.   assigns the following Volumes:
  88.    - SYS
  89.    - LIBS
  90.    - DEVS
  91.    - FONTS
  92.    - C
  93.    - L
  94.    - S
  95.  
  96.   loads the Devs:System-Configuration
  97.   installs the FastFileSystem
  98.   loads and installs the omti.device
  99.   opens the first CLI Window with NEWCON: 
  100.   
  101. - Under AmigaOS 2.0, this code is more sparse (it needn't to do so much patches
  102.   as under AmigaOS 1.3, because many of these things are already done by the OS.
  103.  
  104.   - it just loads and installs the omti.device
  105.   - mounts up to four partitions on each of the two possible drives
  106.   
  107.  
  108. I  also  wanted  to  set  up  some  kind  of  parameter  block, who keeps all
  109. information  about the drive.  This became Block 0 on Track 0 on Cyl 0 of the
  110. harddisk.
  111.  
  112. In  general, you can say, that the Cyl 0 of a harddisk is reserved for system
  113. useage.
  114.  
  115. 3.0 Bootblocks
  116. --------------
  117.  
  118. The code for the bootblocks is found in src/bootblock/1.3 and src/bootblock/2.0
  119.  
  120. 3.1. Code for AmigaOS 1.3
  121. -------------------------
  122.  
  123. This  code  makes itself resident and reset-able, if you use the 'setpatch R'
  124. option,  which  is  also used for the RAD:  ramdisk.  It prevents itself from
  125. being overwritten by the flaky reset routine in AmigaOS 1.3
  126.  
  127. If  you  use  this  code,  you'll need exactly *ONE* disk access *EVER*.  All
  128. further  attempts to boot from harddisk are made from this resident bootblock
  129. code.
  130.  
  131. You  can  override  this  by either inserting a bootable disk in drive DF0 or
  132. pressing the left mousebutton while the reset sequence.
  133.  
  134. 3.2 Code for AmigaOS 2.0
  135. ------------------------
  136.  
  137. This  code  does  *NOT*  make  itself  resident.  Reason for this was, that I
  138. wanted  to  insert  the  reboot  code  properly  into  the  AmigaOS 2.0 reset
  139. sequence,  i.a.   after  the initalisation but before the boot menu (the boot
  140. menu should show all drives already mounted) but I never managed to get it to
  141. work.   Then  again  I  lost  interest  in  writing the resident routines and
  142. dropped  them alltogether.  So this bootblock must be read for every reset or
  143. you'll see the disk animation.
  144.  
  145. Nevertheless,   this   bootblock   sets   the   'Silent   Startup'   Bit   in
  146. expansion.library,  so  you'll  boot without a window up to the first console
  147. write.
  148.  
  149. 4.0. StartUp-Code
  150. -----------------
  151.  
  152. *WARNING* YOU MUST CUSTOMIZE THIS CODE FOR YOUR OWN GOOD & HARDDISK!
  153.  
  154. 4.1. StartUp-Code for AmigaOS 1.3
  155. ---------------------------------
  156.  
  157. This  code  is rather crude and not documented.  It relies heavily on the not
  158. documeted  features  of  AmigaOS  1.3  and  dos.library.  However, it was not
  159. written by me and I'm not willing to support it.  Use AmigaOS 2.0.
  160.  
  161. If  you really want to bother someone with this code, ask the author, Michael
  162. Schröder  (mlschroe@immd4.informatik.uni-erlangen.de).  If he's in good mood,
  163. he may help.
  164.  
  165. 4.2. StartUp-Code for AmigaOS 2.0
  166. ---------------------------------
  167.  
  168. This code first sets up the device (it contains some kind of small relocator)
  169. and binds it into the device-list.
  170.  
  171. Then it mounts all of your harddisk-partitions. So you don't need any mountlist.
  172.  
  173. Every harddisk has an entry like this in the boot-code:
  174.  
  175. part0           dc.b    'DH1',0,0,0,0,0
  176.  
  177.                 dc.l    20           ; Boot-Priority
  178.  
  179.                 dc.l    0            ; Name of the Drive
  180.                 dc.l    0            ; Name of the Device
  181.                 dc.l    0            ; Unit for omti.device (Unit 0)
  182.                 dc.l    0            ; Flags für OpenDevice
  183.  
  184.                 ;STRUCTURE DosEnvec
  185.                 dc.l    16           ;     ULONG de_TableSize         ; Size of Environment vector
  186.                 dc.l    128          ;     ULONG de_SizeBlock         ; in longwords: standard value is 128
  187.                 dc.l    0            ;     ULONG de_SecOrg            ; not used; must be 0
  188.                 dc.l    4            ;     ULONG de_Surfaces          ; # of heads (surfaces). drive specific
  189.                 dc.l    1            ;     ULONG de_SectorPerBlock    ; not used; must be 1
  190.                 dc.l    26           ;     ULONG de_BlocksPerTrack    ; blocks per track. drive specific
  191.                 dc.l    2            ;     ULONG de_Reserved          ; DOS reserved blocks at start of partition.
  192.                 dc.l    0            ;     ULONG de_PreAlloc          ; DOS reserved blocks at end of partition
  193.                 dc.l    0            ;     ULONG de_Interleave        ; usually 0
  194.                 dc.l    1            ;     ULONG de_LowCyl            ; starting cylinder. typically 0
  195.                 dc.l    300          ;     ULONG de_HighCyl           ; max cylinder. drive specific
  196.                 dc.l    30           ;     ULONG de_NumBuffers        ; Initial # DOS of buffers.
  197.                 dc.l    1            ;     ULONG de_BufMemType        ; type of mem to allocate for buffers
  198.                 dc.l    256          ;     ULONG de_MaxTransfer       ; Max number of bytes to transfer at a time
  199.                 dc.l    $fffffffe    ;     ULONG de_Mask              ; Address Mask to block out certain memory
  200.                 dc.l    0            ;     LONG  de_BootPri           ; Boot priority for autoboot
  201.                 dc.l    $444f5301    ;     ULONG de_DosType           ; ASCII (HEX) string showing filesystem type;
  202.  
  203.  
  204. This is mainly the information, that you'll find in a mountlist entry.
  205. You'll find a little more information in the dos/ includes. 
  206.  
  207. Please don't forget, that Cyl 0 is reserved for the system!
  208.  
  209. Bootpriority is not yet used. (I doubt if it ever will be)
  210.  
  211. 4.3. How to put startup code on the disk?
  212. -----------------------------------------
  213.  
  214. This is the most interesting issue for you.
  215.  
  216. You'll  need  a  good monitor for this.  I recommend FMon, written by Michael
  217. Schröder, which you can find in the UseNet Archives (comp.binaries.amiga).
  218.  
  219. 4.3.1. For AmigaOS 1.3
  220. ----------------------
  221.  
  222. Don't  do  it  yourself.   You'll  need  more  help that I can give you.  Ask
  223. Michael.   Use the supplied boottracks for AmigaOS 1.3 as you starting point.
  224. These contain all four boottracks from 0 - 3.
  225.  
  226. Track layout for AmigaOS 1.3:
  227.  
  228. 0000 - 00FF            Parameter-Block  / Track 0 
  229. 3400 - 34FF            Basic boot code  / Tracks 1 - 3
  230. 3500 - 3CFF            omti.device     
  231. 3D00 - 6CFF            Fast File System
  232. 6D00 - 8AFF            NewCon-Handler
  233. 8B00 - A6FF            Shell-Seg
  234. A700 - AFFF            StartUp-Code
  235. B000 - CFFF            free
  236.  
  237. FFS,  NewCon  and  ShellSeg  have  been  *HEAVILY* modified to work with this
  238. layout.
  239.  
  240. Don't  worry  if you can't get your system alife with AmigaOS 1.3.  Don't use
  241. it.  Use AmigaOS 2.0.
  242.  
  243. 4.3.2. For AmigaOS 2.0
  244. ----------------------
  245.  
  246. At first, allocate a memory block of $6800 bytes. This will be your bootracks.
  247.  
  248. Then,  load the omti-device absolute to the offset $2004.  *DO NOT RELOCATE!*
  249. The device must be for address $0.  The bootcode will relocate it.
  250.  
  251. The hexdump should look like this:
  252.  
  253. [...]
  254. 1FF0: 00000000 00000000 00000000 00000000    ................
  255. 2000: 00000000 70014E75 4AFC0000 00040000    ....p.NuJü......
  256. 2010: 077A8004 03000000 006E0000 007A0000    .z.......n...z..
  257. [...]
  258.  
  259. Load  the  bootcode to offset 0.  It may be relocated, because it contains no
  260. absolute addresses.
  261.  
  262. The hexdump should look like this:
  263.  
  264. 0000: 424F4F54 43E81FFC 22095881 D3FC0000    BOOTCè.ü".X.Óü..
  265. 0010: 00082C79 00000004 20290002 D0812340    ..,y.... )..Ð.#@
  266. 0020: 00022029 0006D081 23400006 2029000E    .. )..Ð.#@.. )..
  267. [...]
  268.  
  269. Important is the 'BOOT' in the first four bytes.
  270.  
  271. Then safe this memory block to a file. It must be exactly 26624 Bytes long.
  272.  
  273. Then  use the supplied 'OmtiWrite' to put the boottrack on the disk.  Do this
  274. *AFTER* lowlevel format.  Format will supply the Parameter block.
  275.  
  276. If  you set the disk mount entries (see above) correct, you should be able to
  277. boot from harddisk and get your partitions mounted correctly.
  278.  
  279. 5.0. The device
  280. ---------------
  281.  
  282. Look at the code. I can't say much more. It will not work with disks without
  283. PARA block. So format new disks immediately. 
  284.  
  285. The  device  supports  two  drives,  in fact I'm using it with two drives for
  286. about three years under both, AmigaOS 1.3 and 2.0.
  287.  
  288. 6.0. Support programs
  289. ---------------------
  290.  
  291. 6.1. OmtiFormat
  292. ---------------
  293.  
  294. This is the lowlevel formatter for the harddisks. It's quite self explanatory.
  295.  
  296. You  can read Err-Lists from DEVS:omti/ and store them there.  So it's a good
  297. idea to have a disk handy, from which you boot before formatting.
  298.  
  299. An Error-List looks like this:
  300.  
  301. ERRLIST   <- Yes, it's really an ERRLIST
  302. 37        <- Number of bad tracks
  303. 4,75      <- head, track
  304. 4,76
  305. [..]
  306. 5,19
  307. 5,171
  308. 5,172
  309. [..]
  310. 5,418
  311. 5,441
  312.  
  313. You  can  make this list with a text editor and store them into DEVS:omti/ as
  314. 'Errorlist.0'  and 'Errorlist.1' for unit 0 and 1.  You'll find the errorlist
  315. for your drive on a label glued to the drive.  (At least with Seagate drives)
  316.  
  317. You  must click on the necessary gadgets to activate certain functions.  E.g.
  318. at  least  unit and steprate must be clicked to be able to use 'Get Parameter
  319. from Harddisk'
  320.  
  321. The  user  interface  is  crude  and  not  written  to the C= style guide.  I
  322. apologize for it.  But then again, it's about three and a half years old.
  323.  
  324. You  can't  click  Nof WrCyl.  These are calculated by subtracting the tracks
  325. needed for error correction tracks.
  326.  
  327. The formatter can also read and write the PARA blocks on the harddisk. So you
  328. needn't reformat to change e.g. the Autopark Flag. 
  329.  
  330. Parameter blocks are stored as 'ParaBlock.0' and 'ParaBlock.1' in DEVS:Omti/
  331.  
  332.  
  333. *WARNING*  If you low-level format your drive, you SHOULD DEFINITELY be aware
  334. what  you're  doing.  Drives which you low-level formatted are *EMPTY* and no
  335. force  in  the  world  (except a backup) can give you your data back.*
  336.  
  337.                              You've been warned!
  338.  
  339.  
  340. All other tools are less harmful to your data :)
  341.  
  342. 6.2. OmtiInstall
  343. ----------------
  344.  
  345. This rather simple tool installs the custom bootblocks to boot from unit 0 or
  346. unit 1 on a floppy disk.
  347.  
  348. It  tries  to read DEVS:Omti/OmtiBoot.0 or DEVS:Omti/OmtiBoot.1, which should
  349. contain the bootblocks together with checksum and all.
  350.  
  351. You  must create these bootblock files from the executeables with the help of
  352. a monitor, which can also correct the bootblock checksum.  Did I mention FMon
  353. yet?  Yes?  ;) 
  354.  
  355. 6.3. OmtiInfo
  356. -------------
  357.  
  358. This tool reads the PARA block of a harddisk and displays some statistics.
  359.  
  360. This is how my drives show up:
  361.  
  362. Parameter fuer Drive 0:
  363. ----------------------
  364.  
  365. Device-Parameter:
  366. Hoechster Zylinder:                   614
  367. Hoechster schreib-/lesbarer Zylinder: 614
  368. Write-Precompensation Zylinder:       256
  369. Park-Zylinder:                        670
  370. Koepfe:                               4
  371. Steprate im uSec:                     10
  372.  
  373. Init-Parameter:
  374. AutoPark aktiv:                       NEIN
  375. Write-Protect:                        NEIN
  376.  
  377. Boot-Parameter:
  378. Boot-LUN:                             0
  379. Startkopf fuer Bootspur:              1
  380. Startsektor fuer Bootspur:            0
  381. Startspur fuer Bootspur:              0
  382. Anzahl der geladenen Bloecke:         78
  383.  
  384. Format-Parameter:
  385. Verwendeter Interleave:               2
  386. Sektoren pro Spur:                    26
  387.  
  388. Sonstiges:
  389. Bruttokapazitaet des Drive: 31.23 MByte = 31980 KByte = 32747520 Byte
  390. Nettokapazitaet des Drive:  31.18 MByte = 31928 KByte = 32694272 Byte
  391.  
  392.  
  393. Parameter fuer Drive 1:
  394. ----------------------
  395.  
  396. Device-Parameter:
  397. Hoechster Zylinder:                   819
  398. Hoechster schreib-/lesbarer Zylinder: 812
  399. Park-Zylinder:                        0
  400. Koepfe:                               6
  401. Steprate im uSec:                     10
  402.  
  403. Init-Parameter:
  404. AutoPark aktiv:                       NEIN
  405. Write-Protect:                        NEIN
  406.  
  407. Boot-Parameter:
  408. Boot-LUN:                             1
  409. Startkopf fuer Bootspur:              1
  410. Startsektor fuer Bootspur:            0
  411. Startspur fuer Bootspur:              0
  412. Anzahl der geladenen Bloecke:         26
  413.  
  414. Format-Parameter:
  415. Verwendeter Interleave:               2
  416. Sektoren pro Spur:                    26
  417.  
  418. Sonstiges:
  419. Bruttokapazitaet des Drive: 62.46 MByte = 63960 KByte = 65495040 Byte
  420. Nettokapazitaet des Drive:  61.85 MByte = 63336 KByte = 64856064 Byte
  421.  
  422. (Yeah,  they're  old, they're slow, they're hot and they were EXPENSIVE.  But
  423. they're still running fine.  Why should I change?  ;)
  424.  
  425.  
  426. 6.4. OmtiRead and OmtiWrite
  427. ---------------------------
  428.  
  429. These  tools  are used to read and write 2.04 compatible boot tracks from the
  430. harddisk  and  to  the  harddisk.   They  both  work  on track 1 and 2 of the
  431. harddisk (1.3 boottracks are on 1-3).
  432.  
  433. OmtiWrite may damage your boottrack, but can do no harm to your data.
  434.  
  435.  
  436. 6.5. OmtiDisplay_Timer and OmtiDisplay_Vector
  437. ---------------------------------------------
  438.  
  439. These tools have the same purpose.  Their only difference:  OmtiDisplay_Timer
  440. works and OmtiDisplay_Vector crashes.  :)
  441.  
  442. They  both  simulate the LEDs of the drives in a small window up in the right
  443. corner of the screen.  This is useful if you don't have the drive led on your
  444. front panel of if your computer is faaaaar away from the monitor.
  445.  
  446. If I think about it, there may be only a 'geta4()' missing in .._Vector', but
  447. I'm much too lazy to look at the code again.  As I told you, this whole thing
  448. is  a  hack  from  the  beginning  and I do not really want to support it any
  449. longer.  But you and you and you asked me about a release.  So there.
  450.  
  451. .._Timer  uses  the timer-device to poll all 1/10 of a sec.  the state of the
  452. drive motors and draw the led symbol.  .._Vector should use the callback hook
  453. in the device. 
  454.  
  455. If you get .._Vector to work, tell me. I'll be happy, too.
  456.  
  457.  
  458. 7.0. And that's a wrap!
  459. -----------------------
  460.  
  461. At  least  I think.  If you still have followed me up to here (and understood
  462. everything :), I wish you good luck with installing this software.  You'll be
  463. rewarded  with  blinding  performance (This thingie is *MUCH* faster than the
  464. original c't device and about 10 % faster that the ALF device).
  465.  
  466. If you got it to work on your system, tell me. I'll be happy to hear.
  467.  
  468. You  still  have  questions?   Well,  ask me.  And may the source be with you
  469. (that's why I included it.  :)
  470.  
  471.  
  472.     Erlangen, in the Fall of 1992
  473.         Henning
  474.  
  475.